home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / c / awin / awfreepensinner.asm next >
Assembly Source File  |  1999-05-17  |  799b  |  35 lines

  1. ; FILE: GG:src/own/awin/awfreepensinner.ASM     REV: 0 --- awfreepens ReleasePen loop in 0x0 asm
  2. ; LINK: >LEAVEOBJ>
  3. ; History
  4. ;  0      13th Dec 1998: started because 256 ReleasePens take quite a
  5. ;         long time due PPC<->0x0 contextswitches.
  6. ;
  7.  
  8. ; a0 = UBYTE *remap (pen0, pen1, ... pen<n>)
  9. ; a1 = UBYTE *penal (free0, free1, ... free<n>)
  10. ; a2 = struct ColorMap *colormap
  11. ; a6 = struct Library *GfxBase
  12.  
  13. _awfreepensinner68k:
  14.     movem.l    d2-d7/a2-a6,-(sp)
  15.  
  16.     move.l    a0,a3
  17.     move.l    a1,a4
  18.     move.l    #256,d7
  19.  
  20. .lop    tst.b    (a4)        ; releasepen this pen?
  21.     beq.b    .skip        ; nope, skip
  22.     moveq    #0,d0
  23.     move.l    a2,a0        ; colormap
  24.     move.b    (a3),d0        ; pen number
  25.     jsr    -$3b4(a6)    ; _LVOReleasePen
  26. .skip    clr.b    (a4)+        ; clear penal flag
  27.     clr.b    (a3)+        ; clean pen num
  28.  
  29.     subq.l    #1,d7
  30.     bne.b    .lop
  31.  
  32.     movem.l    (sp)+,d2-d7/a2-a6
  33.     rts
  34.  
  35.